﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using SistemaGO_Library;
using SistemaGO_Library.Entidades.Ocorrencia;


namespace SistemaGO_Desktop.Visao.Telas
{
    public partial class frmRelatorioOcorrencias : Form
    {
        private static frmRelatorioOcorrencias instancia = null;
        Fachada fachada = Fachada.getInstance();
        
        private frmRelatorioOcorrencias()
        {
            InitializeComponent();
        }

        public static frmRelatorioOcorrencias getInstance() {
            if (instancia == null) {
                instancia = new frmRelatorioOcorrencias();
            } else {
                instancia.Focus();
            }
            return instancia;
        }

        private void frmRelatorioOcorrencias_FormClosing(object sender, FormClosingEventArgs e) {
            instancia = null;
        }

        private void limparTela()
        {
            tbRelOcorrenciaDenunciante.Text = "";
            cbBairroRelOcorrencia.Text = "Selecione";           
        }

        private void btRelatorioFiltrarOcorrencia_Click(object sender, EventArgs e)
        {
            try
            {
                this.reportViewer1.Clear();
                bindingSource1.Clear();
                ArrayList arrayOcorrencias = new ArrayList();
                arrayOcorrencias = this.gerarRelatorio();
                List<Ocorrencia> ocorrencias = new List<Ocorrencia>();

                for (int i = 0; i < arrayOcorrencias.Count; i++)
                {
                    Ocorrencia ocorrencia = new Ocorrencia();

                    ocorrencia = (Ocorrencia)arrayOcorrencias[i];

                    if(ocorrencia.Ocorrencia_situacao.Equals("R")){
                        ocorrencia.Ocorrencia_situacao = "Recebida";
                    }else if(ocorrencia.Ocorrencia_situacao.Equals("F")){
                        ocorrencia.Ocorrencia_situacao = "Fiscalizar";
                    }else if(ocorrencia.Ocorrencia_situacao.Equals("V")){
                        ocorrencia.Ocorrencia_situacao = "Válida";
                    }else if(ocorrencia.Ocorrencia_situacao.Equals("C")){
                        ocorrencia.Ocorrencia_situacao = "Cancelada";
                    }else if(ocorrencia.Ocorrencia_situacao.Equals("T")){
                        ocorrencia.Ocorrencia_situacao = "Terminada";
                    }else if(ocorrencia.Ocorrencia_situacao.Equals("A")){
                        ocorrencia.Ocorrencia_situacao = "Alterada";
                    }

                    ocorrencias.Add(ocorrencia);
                    bindingSource1.DataSource = ocorrencias;
                }

                this.reportViewer1.RefreshReport();
            }
            catch
            {                
                MessageBox.Show("Ocorrência(s) não encontrada(s)", "Falha na Busca", MessageBoxButtons.OK, MessageBoxIcon.Information);
                limparTela();
            }
        }


        /*
        private DataGridViewPrint PrintGrid;
        private void btnPrint_Click(object sender, System.EventArgs e)
        {
            frmRelatorioOcorrencias fpr = new frmRelatorioOcorrencias();
            fpr.Title = dataGridView1.CaptionText;
            fpr.ShowDialog();
            if (fpr.Result > 0)
            {
                PrintGrid = new DataGridViewPrint(printDocument1, DataGridView1, fpr.bBlackWhite);
                PrintGrid.PrintTitle = fpr.bTitle;
                PrintGrid.Title = fpr.Title;
                if (fpr.Result == 1) // Print
                {
                    if (printDialog1.ShowDialog() == DialogResult.OK)
                    {
                        printDocument1.Print();
                    }
                }
                else if (fpr.Result == 2) // Page setup
                {
                    pageSetupDialog1.ShowDialog();
                }
                else if (fpr.Result == 3) // Preview
                {
                    printPreviewDialog1.Icon = fpr.Icon;
                    printPreviewDialog1.ShowDialog();
                }
            }
        }
        

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.HasMorePages = PrintGrid.Print(e.Graphics);
        }
        */






        private void btRelatorioOcorrenciaExportar_Click(object sender, EventArgs e)
        {
            this.reportViewer1.Clear();
            checkTodas.Checked = true;
        }

        private void frmRelatorioOcorrencias_Load(object sender, EventArgs e)
        {
            this.reportViewer1.RefreshReport();
            this.reportViewer1.Clear();
        }

        private void cbRelatorioBairroOcorrencia_Leave(object sender, EventArgs e)
        {
            if (cbBairroRelOcorrencia.Text.Equals(""))
            {
                cbBairroRelOcorrencia.Text = "Selecione";
            }
        }

        private void cbRelatorioStatusOcorrencia_Leave(object sender, EventArgs e)
        {
           
        }

        private void checkRelOcorrenciaPeriodo_CheckedChanged(object sender, EventArgs e)
        {
            if (checkRelOcorrenciaPeriodo.Checked == true)
            {
                dtpRelOcorrencia1.Enabled = true;
                dtpRelOcorrencia2.Enabled = true;
                checkTodas.Checked = false;
            }
            else {
                dtpRelOcorrencia1.Enabled = false;
                dtpRelOcorrencia2.Enabled = false;
                verCheckTodas();
            }
        }

        private void checkRelOcorrenciaBairro_CheckedChanged(object sender, EventArgs e)
        {
            if(checkRelOcorrenciaBairro.Checked == true){
                cbBairroRelOcorrencia.Enabled = true;
                checkTodas.Checked = false;
            }else{
                cbBairroRelOcorrencia.Enabled = false;
                cbBairroRelOcorrencia.Text = "Selecione";
                verCheckTodas();
            }
        }

        private void checkRelOcorrenciaDenunciante_CheckedChanged(object sender, EventArgs e)
        {
            if(checkRelOcorrenciaDenunciante.Checked == true){
                tbRelOcorrenciaDenunciante.Enabled = true;
                checkTodas.Checked = false;
            }else{
                tbRelOcorrenciaDenunciante.Enabled = false;
                tbRelOcorrenciaDenunciante.Text = null;
                verCheckTodas();
            }
        }

        private ArrayList gerarRelatorio() {        
            /*GERANDO CODIGOS DA BUSCA
            * CÓDIGOS GERADOS
            * 
            * 1   = mes
            * 2   = bairro
            * 3   = denunciante
            * 12  = mes e bairro
            * 13  = mes e denunciante
            * 123 = mes, bairro e denunciante
            * 23  = bairro e denunciante
            * 
           */
            string codigo1 = "";

            if (checkRelOcorrenciaPeriodo.Checked == true) {
                codigo1 = codigo1 + "1";
            }
            if (checkRelOcorrenciaBairro.Checked == true)
            {
                codigo1 = codigo1 + "2";
            }
            if (checkRelOcorrenciaDenunciante.Checked == true)
            {
                codigo1 = codigo1 + "3";
            }
            if (checkTodas.Checked)
            {
                codigo1 = 0+"";
            }
            int codigo2 = Int32.Parse(codigo1);
            DateTime data1 = Convert.ToDateTime(dtpRelOcorrencia1.Text);
            DateTime data2 = Convert.ToDateTime(dtpRelOcorrencia2.Text);

            return fachada.gerarRelatorioOcorrencia(codigo2, data1, data2, cbBairroRelOcorrencia.Text, tbRelOcorrenciaDenunciante.Text);           
        }

        private void verCheckTodas() {
            if (!checkRelOcorrenciaBairro.Checked && !checkRelOcorrenciaDenunciante.Checked && !checkRelOcorrenciaPeriodo.Checked)
            {
                checkTodas.Checked = true;
            }
        }

        private void checkTodas_CheckedChanged(object sender, EventArgs e)
        {
            if(checkTodas.Checked == true){
                checkRelOcorrenciaPeriodo.Checked = false;
                checkRelOcorrenciaDenunciante.Checked = false;
                checkRelOcorrenciaBairro.Checked = false;
            }else if(checkRelOcorrenciaBairro.Checked==false&&checkRelOcorrenciaDenunciante.Checked==false&checkRelOcorrenciaPeriodo.Checked==false){
                checkTodas.Checked = true;
            }
        }
    }
}
